<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      var rotate = function (matrix) {
        // 方法一：（）---时间：O（）（n^2）---空间：O（1）（）
        function reverse(arr) {
          const start = 0;
          const end = arr.length - 1;
          while (start < end) {
            [arr[start], arr[end]] = [arr[end], arr[start]];
            start++;
            end--;
          }
        }

        // if (matrix.length === 0) {
        //   return matrix;
        // }
        // const row = matrix.length;
        // for (let i = 0; i < row; i++) {
        //   for (let j = i+1; j < row; j++) {
        //     const temp = matrix[i][j];
        //     matrix[i][j] = matrix[j][i];
        //     matrix[j][i] = temp;
        //   }
        // }
        // for (let i = 0; i < row; i++) {
        //   // matrix[i].reverse();
        //   // 用自己写的reverse好像也一样
        //   reverse(matrix[i]);
        // }
        // return matrix;

        // 方法二：（）---时间：O（）（n^2）---空间：O（n^2）（）
        if (matrix.length === 0) return matrix;
        const row = matrix.length;
        const arr = Array(row).fill(0).map(() => Array(row).fill(0));
        for (let i = 0; i < row; i++) {
          for (let j = 0; j < row; j++) {
            arr[j][row - i - 1] = matrix[i][j]
          }
        }
        for (let i = 0; i < row; i++) {
          for (let j = 0; j < row; j++) {
            matrix[i][j] = arr[i][j]
          }
        }
        return arr;
      };
      console.log(
        rotate([
          [1, 2, 3],
          [4, 5, 6],
          [7, 8, 9],
        ])
      );
      // 方法一：对于矩阵中第 i 行的第 j 个元素，在旋转后，它出现在倒数第 i 列的第 j 个位置
      // 即 [i,j]=>[j,n-i-1]
      // [0,0]=>[0,2]
      // [0,1]=>[1,2]
      // [0,2]=>[2,2]
      // [1,0]=>[0,1]
      // 方法二：
      // 可以延左上角到右下角的对角线翻转
      // [1,4,7]
      // [2,5,8]
      // [3,6,9]
      // 位置变化
      // [0,1]=>[1,0]
      // [0,2]=>[2,0]
      // 然后再延中线翻转
      // [7,4,1]
      // [8,5,2]
      // [9,6,3]
      // 位置变化
      // [0,0]=>[0,2]
      // [1,0]=>[1,2]
    </script>
  </body>
</html>
